//----------------------------------------------------------------------------------------------
//	Filename:	Shape.h
//	Author:		Keith Bugeja
//	Date:		27/02/2010
//----------------------------------------------------------------------------------------------
//	Implementation for Rays in R3
//----------------------------------------------------------------------------------------------
#pragma once

#include <boost/format.hpp>
#include <boost/shared_ptr.hpp>

#include "../Object/Object.h"
#include "../Geometry/BoundingVolume.h"

namespace PCS
{
	namespace Core
	{
		//----------------------------------------------------------------------------------------------
		// IShape : Abstract base class for class for all shape primitives. 
		//----------------------------------------------------------------------------------------------
		class IBoundingVolume;

        class IShape 
			: public Object
		{
		public:
			IShape(void) : Object() { }
			IShape(const std::string& p_strName) : Object(p_strName) { }

			virtual bool IsBounded(void) const = 0;
			virtual void ComputeBoundingVolume(void) = 0;
			virtual IBoundingVolume* GetBoundingVolume(void) const = 0;
			
			virtual std::string ToString(void) const { return "IShape"; };
		};

		//----------------------------------------------------------------------------------------------
		// ShapeManager : All Shape factories must register with object.
		//----------------------------------------------------------------------------------------------
		//typedef FactoryManager<IShape> ShapeManager;
	} 
}